/*
 * EnumPropertyEditor.java
 *
 * Created on August 18, 2006, 10:43 AM
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package org.jdesktop.beans.editors;

import java.beans.PropertyEditorSupport;
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;

/**
 *
 * @author joshy
 */
public class EnumPropertyEditor<E extends Enum<E>> extends PropertyEditorSupport {
	private Class<E> en;
	private EnumSet<E> set;

	/** Creates a new instance of EnumPropertyEditor */
	public EnumPropertyEditor(Class<E> en) {
		this.en = en;
		set = EnumSet.allOf(en);
	}

	@Override
	public String[] getTags() {
		List<String> strs = new ArrayList<String>();
		for (E e : set) {
			strs.add(e.toString());
		}
		return strs.toArray(new String[0]);
	}

	@Override
	public String getAsText() {
		return getValue().toString();
	}

	@Override
	public void setAsText(String text) throws IllegalArgumentException {
		// u.p("setting as text: " + text);
		Enum<E> e = Enum.valueOf(en, text);
		setValue(e);
	}

	@Override
	public String getJavaInitializationString() {
		// org.jdesktop.stuff.Stuff.InsideEnum.VALUE;
		// the '$' must be converted to '.' to deal with public inner classes
		return new String(en.getName() + "." + getAsText()).replace("$", ".");
	}

}
